﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CuadroMandoIntegralFMCH.Ds;
using CuadroMandoIntegralFMCH.Helpers;
using CuadroMandoIntegralFMCH.Reportes;
using DAL.Modelos;
using DAL;
using DAL.DTOs;
using Microsoft.ReportingServices.Interfaces;
using SortOrder = System.Windows.Forms.SortOrder;

namespace CuadroMandoIntegralFMCH.Form_s.Debitos
{
    public partial class DebitosConsultar : Form
    {

        public DebitosConsultar()
        {
            InitializeComponent();
        }

        private void btConsultar_Click(object sender, EventArgs e)
        {

            //Verificar si existe el período seleccionado
            if (new Modelo().VerificarPeriodoDebito(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year))
            {
                Procesar();
            }
            else
            {
                MessageBox.Show("El período solicitado no Existe en la Base de Datos", "Información",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void Procesar()
        {
            var dsGeneral = new DsDebitosGeneral();

            //Consulto el ID del Periodo que deseamos consultar los Débitos.
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            //Tomar Lista de debitos de acuerdo al período que haya seleccionado
            //var debitos = new Modelo().DebitosPeriodo(idPeriodo);

            var totales = new Modelo().ListaTotales(idPeriodo);
            if (totales.Count != 0)
            {
                var tot = new SortableBindingList<PrestadoresTotales>(totales);
                dgvDebitosGeneral.DataSource = tot;

                decimal importe = 0;
                foreach (var prestadoresTotalese in tot)
                {
                    importe = importe + prestadoresTotalese.Importe;
                }

                lbTotal.Text = "$  " + importe.ToString();
            }
            else
            {
                MessageBox.Show(
                    @"No se ha procesado la totalización o bien no se importaron los débitos del mes de " +
                    dtpPeriodo.Value.Month.ToString(), "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        private void dgvDebitosGeneral_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            //Consulto el ID del Periodo que deseamos consultar los Débitos.
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos =
                new Modelo().DebitoPrestador(decimal.Parse(dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()),
                                             idPeriodo);

            var cantidad = 0;
            var idMotivo = 999999;
            var motivo = "";
            var tipo = "";
            decimal importeMotivo = 0;
            var i = 0;
            var j = 1;
            var k = 1;
            var dsResumen = new DsDebitosResumen();

            foreach (var debito in debitos)
            {
                if (idMotivo != debito.IdMotivoDebito && i == 0 && i != debitos.Count)
                {
                    var motivoD = new Modelo().ConsultarMotivoDebito((int)debito.IdMotivoDebito);
                    motivo = motivoD.Descripcion;
                    tipo = motivoD.Tipo;
                    idMotivo = (int)debito.IdMotivoDebito;
                    cantidad++;
                    importeMotivo = importeMotivo +
                                    ((debito.HonAcordado - debito.Honorarios) + (debito.GtoAcordado - debito.Gastos));



                }
                else if (idMotivo == debito.IdMotivoDebito && i != debitos.Count)
                {
                    importeMotivo = importeMotivo +
                                    ((debito.HonAcordado - debito.Honorarios) + (debito.GtoAcordado - debito.Gastos));


                    cantidad++;
                }
                else if (idMotivo != debito.IdMotivoDebito && i != 0 && i != debitos.Count)
                {
                    dsResumen.Tables[0].Rows.Add(new object[]
                                                     {
                                                         cantidad,
                                                         motivo,
                                                         importeMotivo,
                                                         tipo,
                                                         idMotivo
                                                     });
                    cantidad = 0;
                    importeMotivo = 0;

                    var motivoD = new Modelo().ConsultarMotivoDebito((int)debito.IdMotivoDebito);
                    motivo = motivoD.Descripcion;
                    tipo = motivoD.Tipo;
                    idMotivo = (int)debito.IdMotivoDebito;
                    cantidad++;
                    importeMotivo = importeMotivo +
                                    ((debito.HonAcordado - debito.Honorarios) + (debito.GtoAcordado - debito.Gastos));


                }
                if (j++ == debitos.Count && idMotivo != debito.IdMotivoDebito)
                {
                    dsResumen.Tables[0].Rows.Add(new object[]
                                                     {
                                                         cantidad,
                                                         motivo,
                                                         importeMotivo,
                                                         tipo,
                                                         idMotivo
                                                     });
                    cantidad = 1;
                    importeMotivo = 0;
                }
                if (k++ == debitos.Count && idMotivo == debito.IdMotivoDebito)
                {
                    dsResumen.Tables[0].Rows.Add(new object[]
                                                     {
                                                         cantidad,
                                                         motivo,
                                                         importeMotivo,
                                                         tipo,
                                                         idMotivo
                                                     });
                    cantidad = 1;
                    importeMotivo = 0;
                }


                i++;


            }


            dgvDebitosResumen.DataSource = dsResumen.Tables[0];

        }

        private void dgvDebitosResumen_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            var dsDetalle = new DsDebitosDetalle();

            dsDetalle.Clear();
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos =
                new Modelo().DebitoPrestadorMotivo(
                    decimal.Parse(dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()), idPeriodo,
                    int.Parse(dgvDebitosResumen.CurrentRow.Cells[4].Value.ToString()));

            foreach (var debito in debitos)
            {
                var importe = (debito.HonAcordado - debito.Honorarios) + (debito.GtoAcordado - debito.Gastos);

                var tipoD = "";
                tipoD = debito.idTipoDebito == 1 ? "Ambulatorio" : "Internado";

                dsDetalle.Tables[0].Rows.Add(new object[]
                                                 {
                                                     debito.Ntransaccion,
                                                     debito.NOrden,
                                                     debito.DocPaciente,
                                                     debito.Paciente,
                                                     debito.CodPractica,
                                                     importe,
                                                     debito.Observaciones,
                                                     tipoD,
                                                     debito.CantidadFacturada,
                                                     debito.CantidadPagada,
                                                     debito.NInternacion,
                                                     debito.Honorarios,
                                                     debito.Gastos,
                                                     debito.HonAcordado,
                                                     debito.GtoAcordado
                                                 });
            }

            dgvDebitosDetalle.DataSource = dsDetalle.Tables[0];
        }

        private void dgvDebitosGeneral_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            var column = dgvDebitosGeneral.Columns[e.ColumnIndex];
            if (column.SortMode != DataGridViewColumnSortMode.Programmatic)
                return;

            var sortGlyph = column.HeaderCell.SortGlyphDirection;
            switch (sortGlyph)
            {
                case SortOrder.None:
                case SortOrder.Ascending:
                    dgvDebitosGeneral.Sort(column, ListSortDirection.Descending);
                    column.HeaderCell.SortGlyphDirection = SortOrder.Descending;
                    break;
                case SortOrder.Descending:
                    dgvDebitosGeneral.Sort(column, ListSortDirection.Ascending);
                    column.HeaderCell.SortGlyphDirection = SortOrder.Ascending;
                    break;
            }
        }

        //Reporte detalle de Débitos solo Circulo Médico Resistencia
        private void resistenciaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosRcia(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "Resistencia" });
        }

        //Reporte detalle de Débitos completo
        private void completoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosGral(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "General" });
        }

        //Reporte detalle de Débitos solo Asociación Médica de Saenz Peña
        private void saenzPeñaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosSP(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "SP" });
        }

        //Reporte detalle de Débitos solo Circulo Sud Chaqueño
        private void villaAngelaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosVA(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "VA" });
        }

        //Reporte detalle de Débitos solo Circulo del Sud Oeste Chaqueño
        private void charataToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosCH(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CH" });
        }

        //Reporte detalle de Débitos solo Colegio 25 de Mayo
        private void quitilipiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosQuitilipi(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "Quitilipi" });
        }

        //Reporte detalle de Débitos solo Circulo Médico de San Martín 
        private void sanMartínToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosSM(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "SM" });
        }

        //Reporte detalle de Débitos Completo de Clinicas
        private void completoToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicas(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "Clinicas" });
        }

        //Reporte Resumen para Pagos
        private void resumenPagosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosGral(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "Pagos" });
        }

        private void btImprimir_Click(object sender, EventArgs e)
        {
            try
            {

                if (dgvDebitosGeneral.CurrentRow.Cells[0].Value != null)
                {
                    
               
                var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

                Debug.Assert(dgvDebitosGeneral.CurrentRow != null, "dgvDebitosGeneral.CurrentRow != null");
                var debitos = new Modelo().DebitosReducidosMedico(idPeriodo,
                                                                  int.Parse(
                                                                      dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()));

                backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "Medico" });
                }
            }
            catch (NullReferenceException ex)
            {

                MessageBox.Show("No ha seleccionado un prestador valido.","Error",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
            }
        }

        //Detalle débitos Clinicas Resistencia
        private void resistenciaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasRcia(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CRcia" });
        }

        //Detalle débitos Clinicas San Martin
        private void sanMartínToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasSM(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CSM" });
        }

        ////Detalle débitos Clinicas Quitilipi
        private void quitilipiToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasQuitilipi(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CQuitilipi" });
        }

        //Detalle débitos Clinicas Saenz Peña
        private void saenzPeñaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasSP(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CSP" });
        }

        //Detalle débitos Clinicas Villa Angela
        private void villaAngelaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasVAngela(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CVA" });
        }

        //Detalle débitos Clinicas Charata
        private void charataToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosClinicasCharata(idPeriodo);

            backgroundWorker1.RunWorkerAsync(new AsyncHelper { debitoReducido = debitos, tipoReporte = "CCH" });
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {


                var debitos = ((AsyncHelper)e.Argument).debitoReducido;
                var tipoReporte = ((AsyncHelper)e.Argument).tipoReporte;
                var debitosGral = new DsDebitosGeneral();
                var debitosReducidos = new DsDebitosReducido();
                var totales = new List<PrestadoresTotales>();
                var bandera = 0;

                var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

                switch (tipoReporte)
                {
                    case "General":
                        totales = new Modelo().ListaTotales(idPeriodo);
                        break;
                    case "Resistencia":
                        totales = new Modelo().ListaTotalesRcia(idPeriodo);
                        break;
                    case "SP":
                        totales = new Modelo().ListaTotalesSP(idPeriodo);
                        break;
                    case "VA":
                        totales = new Modelo().ListaTotalesVA(idPeriodo);
                        break;
                    case "CH":
                        totales = new Modelo().ListaTotalesCH(idPeriodo);
                        break;
                    case "Quitilipi":
                        totales = new Modelo().ListaTotalesQuitilipi(idPeriodo);
                        break;
                    case "SM":
                        totales = new Modelo().ListaTotalesSM(idPeriodo);
                        break;
                    case "Clinicas":
                        totales = new Modelo().ListaTotalesClinicas(idPeriodo);
                        break;
                    case "Medico":
                        Debug.Assert(dgvDebitosGeneral.CurrentRow != null, "dgvDebitosGeneral.CurrentRow != null");
                        totales = new Modelo().ListaTotalesMedico(idPeriodo,
                                                                  int.Parse(
                                                                      dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()));
                        break;
                    case "Pagos":
                        totales = new Modelo().ListaTotales(idPeriodo);
                        bandera = 1;
                        break;
                    case "CRcia":
                        totales = new Modelo().ListaTotalesClinicasRcia(idPeriodo);
                        break;
                    case "CSM":
                        totales = new Modelo().ListaTotalesClinicasSM(idPeriodo);
                        break;
                    case "CVA":
                        totales = new Modelo().ListaTotalesClinicasVAngela(idPeriodo);
                        break;
                    case "CCH":
                        totales = new Modelo().ListaTotalesClinicasCharata(idPeriodo);
                        break;
                    case "CSP":
                        totales = new Modelo().ListaTotalesClinicasSP(idPeriodo);
                        break;
                    case "CQuitilipi":
                        totales = new Modelo().ListaTotalesClinicasQuitilipi(idPeriodo);
                        break;
                }

                foreach (var prestadoresTotalese in totales)
                {
                    debitosGral.Tables[0].Rows.Add(new object[]
                                                   {
                                                       prestadoresTotalese.CodFacturacion,
                                                       prestadoresTotalese.Denominacion,
                                                       prestadoresTotalese.Importe
                                                   });
                }

                decimal totalHonorarios = 0;
                decimal totalGastos = 0;
                decimal totalGeneral = 0;

                if (debitos != null)
                    foreach (var debito in debitos)
                    {
                        var tipoDebito = "";
                        tipoDebito = debito.TipoDebito == 1 ? "Ambulatorio" : "Internado";

                        debitosReducidos.Tables[0].Rows.Add(new object[]
                                                            {
                                                                debito.Documento,
                                                                debito.Paciente,
                                                                debito.Practica,
                                                                debito.CF,
                                                                debito.CA,
                                                                debito.HonF,
                                                                debito.GtoF,
                                                                debito.HonA,
                                                                debito.GtoA,
                                                                debito.Observaciones,
                                                                tipoDebito,
                                                                debito.CodFacturacion
                                                            });

                        totalHonorarios = totalHonorarios + (debito.HonA - debito.HonF);
                        totalGastos = totalGastos + (debito.GtoA - debito.GtoF);

                    }

                totalGeneral = totalHonorarios + totalGastos;

                var rDoc = new ReportDocument();
                rDoc.Load(Application.StartupPath + @"\Reportes\ReporteGeneral.rpt");
                rDoc.SetDataSource(debitosGral);
                rDoc.Refresh();

                if (bandera == 0)
                    rDoc.Subreports[0].SetDataSource(debitosReducidos);

                rDoc.SetParameterValue("TotalHonorario", totalHonorarios);
                rDoc.SetParameterValue("TotalGasto", totalGastos);
                rDoc.SetParameterValue("TotalGeneral", totalGeneral);
                rDoc.SetParameterValue("Fecha", dtpPeriodo.Value.Month.ToString() + "/" + dtpPeriodo.Value.Year.ToString());
                e.Result = new AsyncHelper { reportDocument = rDoc };
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }


        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                if (e.Result == null) return;
                var reportViewer = new ReportViewer();
                reportViewer.SetReportSource(((AsyncHelper)e.Result).reportDocument);
                reportViewer.ShowDialog();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tXTToolStripMenuItem_Click(object sender, EventArgs e)
        {

            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            var debitos = new Modelo().DebitosReducidosGral(idPeriodo);

            var codFacturación = 0;
            var i = 0;
            decimal importeHon = 0;
            decimal importeGto = 0;

            SaveFileDialog saveFileDialog1;
            saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Title = "Guardar Archivo de Texto";
            saveFileDialog1.Filter = "Archivo de Texto (.txt) |*.txt";

            saveFileDialog1.DefaultExt = "txt";
            saveFileDialog1.AddExtension = true;
            saveFileDialog1.RestoreDirectory = true;

            decimal totalHonorarios = 0;
            decimal totalGastos = 0;
            decimal totalGeneral = 0;
            var debitosReducidos = new DsDebitosReducido();

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string ruta = saveFileDialog1.FileName;

                var fichero = new StreamWriter(ruta);
                
                if (debitos != null)
                    foreach (var debito in debitos)
                    {
                        var tipoDebito = "";
                        tipoDebito = debito.TipoDebito == 1 ? "Ambulatorio" : "Internado";

                        debitosReducidos.Tables[0].Rows.Add(new object[]
                                                            {
                                                                debito.Documento,
                                                                debito.Paciente,
                                                                debito.Practica,
                                                                debito.CF,
                                                                debito.CA,
                                                                debito.HonF,
                                                                debito.GtoF,
                                                                debito.HonA,
                                                                debito.GtoA,
                                                                debito.Observaciones,
                                                                tipoDebito,
                                                                debito.CodFacturacion
                                                            });

                        if (codFacturación != debito.CodFacturacion && i == 0)
                        {
                            codFacturación = (int)debito.CodFacturacion;
                            totalHonorarios = totalHonorarios + (debito.HonA - debito.HonF);
                            totalGastos = totalGastos + (debito.GtoA - debito.GtoF);
                        }
                        else if (codFacturación == debito.CodFacturacion)
                        {
                            totalHonorarios = totalHonorarios + (debito.HonA - debito.HonF);
                            totalGastos = totalGastos + (debito.GtoA - debito.GtoF);
                        }
                        else if (codFacturación != debito.CodFacturacion && i != 0)
                        {
                            fichero.WriteLine(codFacturación.ToString() + ";" + "24" + ";" + dtpPeriodo.Value.Year.ToString() + dtpPeriodo.Value.Month.ToString("00") + "2" + ";" + "74" + ";" + totalHonorarios.ToString() + ";" + totalGastos.ToString());

                            totalHonorarios = 0;
                            totalGastos = 0;

                            codFacturación = (int)debito.CodFacturacion;

                            totalHonorarios = totalHonorarios + (debito.HonA - debito.HonF);
                            totalGastos = totalGastos + (debito.GtoA - debito.GtoF);

                        }
                        totalGeneral = totalHonorarios + totalGastos;
                        i++;
                    }

                //foreach (var debito in debitos)
                //{

                //    if (codFacturación != debito.CodFacturacion && i == 0)
                //    {

                //        codFacturación = (int)debito.CodFacturacion;

                //        importeHon = importeHon +
                //                     (debito.HonAcordado - debito.Honorarios);

                //        importeGto = importeGto + (debito.GtoAcordado - debito.Gastos);

                //    }
                //    else if (codFacturación == debito.CodFacturacion)
                //    {
                //        importeHon = importeHon +
                //                     (debito.HonAcordado - debito.Honorarios);

                //        importeGto = importeGto + (debito.GtoAcordado - debito.Gastos);
                //    }
                //    else if (codFacturación != debito.CodFacturacion && i != 0)
                //    {
                //        //escribir en el TXT
                //        fichero.WriteLine(codFacturación.ToString() + ";" + "24" + ";" + dtpPeriodo.Value.Year.ToString() + dtpPeriodo.Value.Month.ToString("00") + "2" + ";" + "74" + ";" + importeHon.ToString() + ";" + importeGto.ToString());


                //        importeHon = 0;
                //        importeGto = 0;

                //        codFacturación = (int)debito.CodFacturacion;


                //        importeHon = importeHon +
                //                     (debito.HonAcordado - debito.Honorarios);

                //        importeGto = importeGto + (debito.GtoAcordado - debito.Gastos);

                //    }
                //    i++;
                //}

                fichero.Close();
                MessageBox.Show("Se guardo el archivo: " + saveFileDialog1.FileName);
                MessageBox.Show("El importe es: " + totalGeneral);
            }
            else
            {
                MessageBox.Show("Has cancelado.");
            }

            saveFileDialog1.Dispose();
            saveFileDialog1 = null;


        }

        private void btBuscar_Click(object sender, EventArgs e)
        {
            try
            {

            
            //Consulto el ID del Periodo que deseamos consultar los Débitos.
            var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);

            //Tomar Lista de debitos de acuerdo al período que haya seleccionado
            //var debitos = new Modelo().DebitosPeriodo(idPeriodo);

            var totales = new Modelo().ListaTotalesPrestador(idPeriodo, decimal.Parse(tbPrestador.Text));
            if (totales.Count != 0)
            {
                var tot = new SortableBindingList<PrestadoresTotales>(totales);
                dgvDebitosGeneral.DataSource = tot;
            }
            else
            {
                MessageBox.Show("No se Encuentra el prestador", @"Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            }
            catch (FormatException )
            {

                MessageBox.Show("No ha ingresado un prestador valido o bien la lista no esta cargada");
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btPdf_Click(object sender, EventArgs e)
        {
            try
            {


                var idPeriodo = new Modelo().VerificacionPeriodoId(dtpPeriodo.Value.Month, dtpPeriodo.Value.Year);



                var debitosGral = new DsDebitosGeneral();
                var debitosReducidos = new DsDebitosReducido();
                var totales = new List<PrestadoresTotales>();
                var bandera = 0;
                var prestador = string.Empty;

                totales = new Modelo().ListaTotalesMedico(idPeriodo,
                                                                      int.Parse(
                                                                          dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()));
                var debitos = new Modelo().DebitosReducidosMedico(idPeriodo,
                                                                  int.Parse(
                                                                      dgvDebitosGeneral.CurrentRow.Cells[0].Value.ToString()));

                foreach (var prestadoresTotalese in totales)
                {
                    debitosGral.Tables[0].Rows.Add(new object[]
                                                   {
                                                       prestadoresTotalese.CodFacturacion,
                                                       prestadoresTotalese.Denominacion,
                                                       prestadoresTotalese.Importe
                                                   });
                }

                decimal totalHonorarios = 0;
                decimal totalGastos = 0;
                decimal totalGeneral = 0;

                if (debitos != null)
                    foreach (var debito in debitos)
                    {
                        var tipoDebito = "";
                        tipoDebito = debito.TipoDebito == 1 ? "Ambulatorio" : "Internado";

                        debitosReducidos.Tables[0].Rows.Add(new object[]
                                                            {
                                                                debito.Documento,
                                                                debito.Paciente,
                                                                debito.Practica,
                                                                debito.CF,
                                                                debito.CA,
                                                                debito.HonF,
                                                                debito.GtoF,
                                                                debito.HonA,
                                                                debito.GtoA,
                                                                debito.Observaciones,
                                                                tipoDebito,
                                                                debito.CodFacturacion
                                                            });

                        totalHonorarios = totalHonorarios + (debito.HonA - debito.HonF);
                        totalGastos = totalGastos + (debito.GtoA - debito.GtoF);

                    }

                totalGeneral = totalHonorarios + totalGastos;

                var rDoc = new ReportDocument();
                rDoc.Load(Application.StartupPath + @"\Reportes\ReporteGeneral.rpt");
                rDoc.SetDataSource(debitosGral);
                rDoc.Refresh();

                rDoc.Subreports[0].SetDataSource(debitosReducidos);

                rDoc.SetParameterValue("TotalHonorario", totalHonorarios);
                rDoc.SetParameterValue("TotalGasto", totalGastos);
                rDoc.SetParameterValue("TotalGeneral", totalGeneral);
                rDoc.SetParameterValue("Fecha", dtpPeriodo.Value.Month.ToString() + "/" + dtpPeriodo.Value.Year.ToString());

                try
                {
                    FolderBrowserDialog brwsr = new FolderBrowserDialog();

                    //Check to see if the user clicked the cancel button
                    if (brwsr.ShowDialog() == DialogResult.Cancel)
                        return;
                    else
                    {


                        ExportOptions CrExportOptions;
                        DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
                        PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
                        CrDiskFileDestinationOptions.DiskFileName = brwsr.SelectedPath + @"\" + dgvDebitosGeneral.CurrentRow.Cells[0].Value + "-" + dtpPeriodo.Value.Month + "-" + dtpPeriodo.Value.Year + ".pdf";
                        CrExportOptions = rDoc.ExportOptions;
                        {
                            CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                            CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                            CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                            CrExportOptions.FormatOptions = CrFormatTypeOptions;
                        }
                        rDoc.Export();
                        MessageBox.Show("La Exportación Finalizó con exito.", "Advertencia", MessageBoxButtons.OK);
                    }
                }
                catch (Exception exception)
                {

                    MessageBox.Show(exception.Message);
                }
            }
            catch (NullReferenceException ex)
            {

                MessageBox.Show("No ha seleccionado un Prestador para exportar","Error",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
            }
        }



    }
}
